package com.tech.view.frame;

import com.formdev.flatlaf.FlatDarkLaf;
import com.formdev.flatlaf.FlatLaf;
import com.tech.service.UserService;
import com.tech.util.LogProcessUtil;
import org.jdesktop.core.animation.timing.Animator;
import org.jdesktop.core.animation.timing.TimingSource;
import org.jdesktop.swing.animation.timing.sources.SwingTimerTimingSource;

import javax.swing.*;
import java.awt.*;
import java.util.logging.Logger;

/**
 * 框架的管理者，采用单例模式
 */
public class FrameManager {
	private final static Logger LOG = LogProcessUtil.getLogger(FrameManager.class.getName());
	private static FrameManager frameManager;
	private UserService userService;
	private JFrame currentFrame;

	private FrameManager() {
		// 注册皮肤
		FlatLaf.registerCustomDefaultsSource("main.java.com.tech.config");
		FlatDarkLaf.setup();

		// 设置时间源
		TimingSource ts = new SwingTimerTimingSource();
		ts.init();
		Animator.setDefaultTimingSource(ts);

		// loginService = new LoginService();
	}

	public static FrameManager getInstance() {
		if (frameManager == null)
			frameManager = new FrameManager();
		return frameManager;
	}

	public void start() {

		// 使用System.getProperty()读取用户配置信息，如上次登录信息、窗口大小


		EventQueue.invokeLater(() -> {
			// 显示登录界面
			switchFrame(new LoginFrame());
		});
	}

	/**
	 * 切换框架，例如从登录框架切换到首页框架
	 * <p>
	 * 将在这里处理框架的位置和不透明度
	 *
	 * @param newFrame 要切换的新框架
	 */
	public void switchFrame(JFrame newFrame) {
		// TODO 为释放的框架添加过渡动画
		if (currentFrame != null) {
			currentFrame.dispose();
		}

		// 设置框架的位置
		newFrame.setLocationRelativeTo(null);
		newFrame.setVisible(true);
		currentFrame = newFrame;
	}

	public JFrame getCurrentFrame() {
		return currentFrame;
	}
}
